import { get, post, put, del } from '~/utils/request';
import type {
  IPaginationResponse,
  IUser,
  ICreateUser,
  IUpdateUser,
  IQueryUser,
  IAssignRoles,
  IAssignPosts
} from '@nbase/shared';

/**
 * 用户信息
 */
export type User = IUser;

/**
 * 创建用户请求参数
 */
export type CreateUserDto = ICreateUser;

/**
 * 更新用户请求参数
 */
export type UpdateUserDto = IUpdateUser;

/**
 * 查询用户请求参数
 */
export type QueryUserDto = IQueryUser;

/**
 * 分配角色请求参数
 */
export type AssignRolesDto = IAssignRoles;

/**
 * 分配岗位请求参数
 */
export type AssignPostsDto = IAssignPosts;

/**
 * 用户服务
 */
export const userService = {
  /**
   * 获取用户列表
   */
  getList(params?: QueryUserDto): Promise<IPaginationResponse<User>> {
    return get('/system/user', { params });
  },

  /**
   * 获取用户详情
   */
  getById(id: string): Promise<User> {
    return get(`/system/user/${id}`);
  },

  /**
   * 创建用户
   */
  create(data: CreateUserDto): Promise<User> {
    return post('/system/user', data);
  },

  /**
   * 更新用户
   */
  update(id: string, data: UpdateUserDto): Promise<User> {
    return put(`/system/user/${id}`, data);
  },

  /**
   * 删除用户
   */
  delete(id: string): Promise<{ message: string }> {
    return del(`/system/user/${id}`);
  },

  /**
   * 分配角色
   */
  assignRoles(id: string, data: AssignRolesDto): Promise<{ message: string }> {
    return post(`/system/user/${id}/roles`, data);
  },

  /**
   * 分配岗位
   */
  assignPosts(id: string, data: AssignPostsDto): Promise<{ message: string }> {
    return post(`/system/user/${id}/posts`, data);
  },

  /**
   * 获取用户的角色
   */
  getRoles(id: string): Promise<string[]> {
    return get(`/system/user/${id}/roles`);
  },

  /**
   * 获取用户的岗位
   */
  getPosts(id: string): Promise<string[]> {
    return get(`/system/user/${id}/posts`);
  },

	  /**
	   * 重置用户密码为默认值 123456
	   */
	  resetPassword(id: string): Promise<{ message: string }> {
	    return post(`/system/user/${id}/reset-password`);
	  },

};

